home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
-
- use strict;
- use warnings;
- use Cairo;
-
- use constant
- {
- WIDTH => 450,
- HEIGHT => 900,
- NUM_STRINGS => 3,
- M_PI => 4 * atan2(1, 1),
- };
-
- {
- my $surface = Cairo::ImageSurface->create ('argb32', WIDTH, HEIGHT);
- my $cr = Cairo::Context->create ($surface);
-
- $cr->set_source_rgb (0.0, 0.0, 0.0);
-
- $cr->translate (40, 40);
-
- $cr->select_font_face ('mono', 'normal', 'normal');
- $cr->set_font_size (12);
- $cr->show_text ('+CTM rotation');
-
- $cr->save;
- $cr->select_font_face ('serif', 'normal', 'normal');
- $cr->set_font_size (40);
- for (my $i = 0; $i < NUM_STRINGS; $i++) {
- my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
- $cr->save;
- $cr->rotate ($angle);
- $cr->move_to (100, 0);
- $cr->show_text ("Text");
- $cr->restore;
- }
- $cr->restore;
-
- $cr->translate (0, HEIGHT / 3);
-
- $cr->move_to (0, 0);
- $cr->show_text ('+CTM rotation');
- $cr->rel_move_to (0, 12);
- $cr->show_text ('-font rotation');
-
- $cr->save;
- $cr->select_font_face ('serif', 'normal', 'normal');
- $cr->set_font_size (40);
- for (my $i = 0; $i < NUM_STRINGS; $i++) {
- my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
- $cr->save;
- $cr->rotate ($angle);
- my $matrix = Cairo::Matrix->init_identity;
- $matrix->scale (40, 40);
- $matrix->rotate (-$angle);
- $cr->set_font_matrix ($matrix);
- $cr->move_to (100, 0);
- $cr->show_text ('Text');
- $cr->restore;
- }
- $cr->restore;
-
- $cr->translate (0, HEIGHT / 3);
-
- $cr->move_to (0, 0);
- $cr->show_text ('+CTM rotation');
- $cr->rel_move_to (0, 12);
- $cr->show_text ('-CTM rotation');
-
- $cr->save;
- $cr->select_font_face ('serif', 'normal', 'normal');
- $cr->set_font_size (40);
- for (my $i = 0; $i < NUM_STRINGS; $i++) {
- my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
- $cr->save;
- $cr->rotate ($angle);
- $cr->move_to (100, 0);
- $cr->rotate (-$angle);
- $cr->show_text ('Text');
- $cr->restore;
- }
- $cr->restore;
-
- $surface->write_to_png ('text-rotate.png');
- }
-